package org.huwei.data.manager;
import java.util.List;

/**
 * 	数据源管理器
 * 	该接口定义了对数据源操作的一些使用规范
 * @author huwei
 */
public interface DataSourceManager<T> {
	
	/**
	 * 	获取数据源管理对象
	 * @return 返回值可能为空，需要在使用前使用{@link #available()} 进行判断
	 */
	T manager();
	
	/**
	 *	判断当前数据源管理器是否可用；
	 * @return true可用 ，false不可用
	 */
	boolean available();
	
	/**
	 * 	获取当前数据源管理器可操作的所有数据源操作对象；
	 * @return 数据源操作对象集合
	 */
	List<DataSourceOperation> dataSource();
	
	/**
	 * 	判断当前数据源管理器可操作的数据源操作对象是否为空，从该方法的返回结果，也可以判断出当前数据源管理器是否可用；
	 * @return 数据源操作对象是否为空
	 */
	boolean isEmpty();
	
	/**
	 * 	判断当前数据源管理器可操作的数据源操作对象的数量；
	 * @return 数据源操作对象的数量
	 */
	int size();
	
	/**
	 * 	获取给定类类型所表示的数据源对象的一下个可操作的数据源操作对象，返回值可能为空；
	 * @param cls {@link DataSourceManagerFacotryProperties#getDataSourceInterfacePackagePath()}包路径所定义接口的实现类的类类型；
	 * @return 数据源操作对象，可能为空
	 */
	DataSourceOperation next(Class<? extends T> cls);
}
